home *** CD-ROM | disk | FTP | other *** search
/ Macworld Expo - Develope…Central & Net Innovations / Developer Central and Net Innovators (MacWorld Expo) (January 1999).iso / Developer Central / Bowers Development / Demo AppMaker / Examples / PowerPlant / Everything / CModelessText.cp < prev    next >
Encoding:
Text File  |  1998-10-11  |  8.9 KB  |  461 lines  |  [TEXT/CWIE]

  1. // CModelessText.cp -- dialog methods
  2.  
  3. #include "CModelessText.h"
  4.  
  5. #include <UEnvironment.h>
  6. #include <UReanimator.h>
  7. #include <URegistrar.h>
  8. #include <LStream.h>
  9. #include <LTabGroup.h>
  10. #include <LEditText.h>
  11. #include <LAMEditTextImp.h>
  12. #include <LGAEditTextImp.h>
  13. #include <LScrollerView.h>
  14. #include <LScrollBar.h>
  15. #include <LAMTrackActionImp.h>
  16. #include <LStdScrollBarImp.h>
  17. #include <LTextEditView.h>
  18. #include <CDoubleEditText.h>
  19. #include <LClock.h>
  20. #include <LAMControlImp.h>
  21. #include <CTextUtils.h>
  22.  
  23. #include "DModelessTextData.h"
  24. #include "EverythingCmds.h"
  25. #include <PP_Messages.h>
  26.  
  27. const MessageT    msgSmall    = 'Smal';
  28. const MessageT    msgX12345    = 'X145';
  29. const MessageT    msgX12345e6    = 'X126';
  30. const MessageT    msgPassword    = 'Pasd';
  31. const MessageT    msgDate    = 'Date';
  32. const MessageT    msgTime    = 'Time';
  33.  
  34. #define PPob_ModelessTextID    217
  35. #define RidL_ModelessTextID    217
  36.  
  37. Boolean        CModelessText::sIsRegistered = false;
  38.  
  39. //----------
  40. CModelessText*        CModelessText::CreateModelessText (
  41.     LCommander*        inSuperCommander,
  42.     CommandT        inCommand,
  43.     DModelessTextData*        inData)
  44. {
  45.     if (!sIsRegistered) {
  46.         RegisterClass ();
  47.     }
  48.     CModelessText*        dlog;
  49.     dlog = ((CModelessText *)LWindow::CreateWindow(PPob_ModelessTextID, inSuperCommander));
  50.     dlog->mCommand = inCommand;
  51.     dlog->SetFromData (inData);
  52.  
  53.     return dlog;
  54. }
  55.  
  56. //----------
  57. #define    RegisterClasses(AbstractClass,AMImpClass,GAImpClass)    \
  58.     RegisterClass_(AbstractClass);    \
  59.     if (useAppearance) {    \
  60.         RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID);    \
  61.     } else {    \
  62.         RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID);    \
  63.     }
  64.  
  65. //----------
  66. void    CModelessText::RegisterClass ()
  67. {
  68.     Boolean        useAppearance = UEnvironment::HasFeature (env_HasAppearance);
  69.  
  70.     RegisterClass_(CModelessText);
  71.  
  72.     // register the pane classes we use
  73.     RegisterClasses (LEditText, LAMEditTextImp, LGAEditTextImp);
  74.     RegisterClass_(LScrollerView);
  75.     RegisterClasses (LScrollBar, LAMTrackActionImp, LStdScrollBarImp);
  76.     RegisterClass_(LTextEditView);
  77.     RegisterClasses (CDoubleEditText, LAMEditTextImp, LGAEditTextImp);
  78.     RegisterClasses (LClock, LAMControlImp, LAMControlImp);
  79.  
  80.     sIsRegistered = true;
  81. }
  82.  
  83. //----------
  84. CModelessText::CModelessText (
  85.     LStream*    inStream)
  86.     : LGADialog (inStream)
  87. {
  88.     mData = nil;
  89. }
  90.  
  91. //----------
  92. CModelessText::~CModelessText()
  93. {
  94.     delete mData;
  95. }
  96.  
  97. //----------
  98. //    This member function gets called once the containment hierarchy that contains
  99. //    this pane has been built. It gives us a chance to get data members for
  100. //    interesting subviews, and to do other operations now that our subviews exist.
  101. void    CModelessText::FinishCreateSelf()
  102. {
  103.     LGADialog::FinishCreateSelf();
  104.  
  105.     mSmallField = (LEditText*) FindPaneByID ('Smal');
  106.     mSmallField->AddListener (this);
  107.  
  108.     mLargeField = (LTextEditView*) FindPaneByID ('Lare');
  109.  
  110.     mX12345Field = (LEditText*) FindPaneByID ('X145');
  111.     mX12345Field->AddListener (this);
  112.  
  113.     mX12345e6Field = (CDoubleEditText*) FindPaneByID ('X126');
  114.     mX12345e6Field->AddListener (this);
  115.  
  116.     mPasswordField = (LEditText*) FindPaneByID ('Pasd');
  117.     mPasswordField->AddListener (this);
  118.  
  119.     mDateField = (LClock*) FindPaneByID ('Date');
  120.     mDateField->AddListener (this);
  121.  
  122.     mTimeField = (LClock*) FindPaneByID ('Time');
  123.     mTimeField->AddListener (this);
  124.  
  125.     mStyledField = (LTextEditView*) FindPaneByID ('Styd');
  126.  
  127.  
  128.     LTabGroup*        tabGroup = new LTabGroup(this);
  129.     mSmallField->SetSuperCommander(tabGroup);    // becomes the active field
  130.     mLargeField->SetSuperCommander(tabGroup);
  131.     mX12345Field->SetSuperCommander(tabGroup);
  132.     mX12345e6Field->SetSuperCommander(tabGroup);
  133.     mPasswordField->SetSuperCommander(tabGroup);
  134.     mDateField->SetSuperCommander(tabGroup);
  135.     mTimeField->SetSuperCommander(tabGroup);
  136.     mStyledField->SetSuperCommander(tabGroup);
  137.  
  138.     UReanimator::LinkListenerToControls(this, this, RidL_ModelessTextID);
  139.         // the purpose is to "connect" self to whatever controls
  140.         // that we want to "listen" to
  141.  
  142. // any additional initialization for your dialog:
  143.  
  144. }
  145.  
  146. //----------
  147. void    CModelessText::SetFromData (
  148.     DModelessTextData*        inData)
  149. {
  150.     mData = inData;
  151.     mData->AddListener (this);
  152.  
  153.     CTextUtils::SetText (mSmallField, mData->GetSmall3 ());
  154.     CTextUtils::SetText (mLargeField, mData->GetLarge3 ());
  155.     mX12345Field->SetValue (mData->GetX12347 ());
  156.     mX12345e6Field->SetDValue (mData->GetX12345e8 ());
  157.     CTextUtils::SetText (mPasswordField, mData->GetPassword3 ());
  158.     {
  159.         LongDateRec        dateTime = mData->GetDate3 ();
  160.         mDateField->SetLongDate (dateTime);
  161.     }
  162.     {
  163.         LongDateRec        dateTime = mData->GetTime3 ();
  164.         mTimeField->SetLongDate (dateTime);
  165.     }
  166.     CTextUtils::SetText (mStyledField, mData->GetStyled3 ());
  167. }
  168.  
  169. //----------
  170. DModelessTextData*        CModelessText::GetData ()
  171. {
  172.     mData->SetLarge3 ((CharsHandle)(mLargeField->GetTextHandle ()));
  173.     mData->SetStyled3 ((CharsHandle)(mStyledField->GetTextHandle ()));
  174.  
  175.     return mData;
  176. }
  177.  
  178. //----------
  179. void    CModelessText::DataChanged (
  180.     long        inDataID)
  181. {
  182.     StopListening ();
  183.  
  184.     if (inDataID == idSmall3) {
  185.         if (!mSmallField->IsTarget ()) {
  186.             CTextUtils::SetText (mSmallField, mData->GetSmall3 ());
  187.         }
  188.     }
  189.     if (inDataID == idLarge3) {
  190.         CTextUtils::SetText (mLargeField, mData->GetLarge3 ());
  191.     }
  192.     if (inDataID == idX12347) {
  193.         if (!mX12345Field->IsTarget ()) {
  194.             mX12345Field->SetValue (mData->GetX12347 ());
  195.         }
  196.     }
  197.     if (inDataID == idX12345e8) {
  198.         if (!mX12345e6Field->IsTarget ()) {
  199.             mX12345e6Field->SetDValue (mData->GetX12345e8 ());
  200.         }
  201.     }
  202.     if (inDataID == idPassword3) {
  203.         if (!mPasswordField->IsTarget ()) {
  204.             CTextUtils::SetText (mPasswordField, mData->GetPassword3 ());
  205.         }
  206.     }
  207.     if (inDataID == idDate3) {
  208.         LongDateRec        dateTime = mData->GetDate3 ();
  209.         mDateField->SetLongDate (dateTime);
  210.     }
  211.     if (inDataID == idTime3) {
  212.         LongDateRec        dateTime = mData->GetTime3 ();
  213.         mTimeField->SetLongDate (dateTime);
  214.     }
  215.     if (inDataID == idStyled3) {
  216.         CTextUtils::SetText (mStyledField, mData->GetStyled3 ());
  217.     }
  218.  
  219.     StartListening ();
  220. }
  221.  
  222. //----------
  223. void    CModelessText::ListenToMessage (
  224.     MessageT    inMessage,
  225.     void        *ioParam)
  226. {
  227.     switch (inMessage) {
  228.     case msg_OK:
  229.             GetSuperCommander()->ProcessCommand(-mCommand, this);
  230.         break;
  231.  
  232.     case msg_Cancel:
  233.             DoClose();
  234.         break;
  235.  
  236.     case msgDataChanged:
  237.             DataChanged ((long)ioParam);
  238.         break;
  239.  
  240.     case msgSmall:
  241.         {
  242.             Str255        string;
  243.  
  244.             mSmallField->GetDescriptor (string);
  245.             mData->SetSmall3 (string);
  246.         }
  247.         break;
  248.  
  249.     case msgX12345:
  250.             mData->SetX12347 (mX12345Field->GetValue ());
  251.         break;
  252.  
  253.     case msgX12345e6:
  254.             mData->SetX12345e8 (mX12345e6Field->GetDValue ());
  255.         break;
  256.  
  257.     case msgPassword:
  258.         {
  259.             Str255        string;
  260.  
  261.             mPasswordField->GetDescriptor (string);
  262.             mData->SetPassword3 (string);
  263.         }
  264.         break;
  265.  
  266.     case msgDate:
  267.         {
  268.             LongDateRec        dateTime;
  269.  
  270.             mDateField->GetLongDate (dateTime);
  271.             mData->SetDate3 (dateTime);
  272.         }
  273.         break;
  274.  
  275.     case msgTime:
  276.         {
  277.             LongDateRec        dateTime;
  278.  
  279.             mTimeField->GetLongDate (dateTime);
  280.             mData->SetTime3 (dateTime);
  281.         }
  282.         break;
  283.  
  284.  
  285.     default:
  286.           ; // do something
  287.         break;
  288.     }
  289. }
  290.  
  291. //----------
  292. Boolean        CModelessText::ObeyCommand (
  293.     CommandT    inCommand,
  294.     void*        ioParam)
  295. {
  296.     Boolean        cmdHandled = true;
  297.  
  298.     if (inCommand < 0) {
  299.         // modal dialog has finished
  300.  
  301.         switch (-inCommand) {
  302.         }
  303.  
  304.     } else {
  305.         switch (inCommand) {
  306.  
  307.         default:
  308.                 cmdHandled = LGADialog::ObeyCommand(inCommand, ioParam);
  309.             break;
  310.         }
  311.     }
  312.  
  313.     return cmdHandled;
  314. }
  315.  
  316. //----------
  317. void    CModelessText::FindCommandStatus (
  318.     CommandT    inCommand,
  319.     Boolean        &outEnabled,
  320.     Boolean        &outUsesMark,
  321.     Char16        &outMark,
  322.     Str255        outName)
  323. {
  324.     outUsesMark = false;
  325.  
  326.     switch (inCommand) {
  327.  
  328.     // +++ Add cases here for the commands you handle
  329.  
  330.     default:
  331.             LGADialog::FindCommandStatus(inCommand, outEnabled,
  332.                                             outUsesMark, outMark, outName);
  333.         break;
  334.     }
  335. }
  336.  
  337. // following functions will be obsoleted
  338. // retained only for backwards compatibility
  339. //----------
  340. void
  341. CModelessText::GetSmallFieldString (
  342.     Str255        str)
  343. {
  344.     mSmallField->GetDescriptor (str);
  345. }
  346.  
  347. //----------
  348. void
  349. CModelessText::SetSmallFieldString (
  350.     ConstStr255Param        str)
  351. {
  352.     mSmallField->SetDescriptor (str);
  353. }
  354.  
  355.     /*
  356.     //----------
  357.     Ptr
  358.     CModelessText::GetLargeFieldText ()
  359.     {
  360.     }
  361.  
  362.     //----------
  363.     void
  364.     CModelessText::SetLargeFieldText (
  365.         Ptr        str)
  366.     {
  367.     }
  368.     */
  369.  
  370. //----------
  371. Int32
  372. CModelessText::GetX12345FieldValue ()
  373. {
  374.     return mX12345Field->GetValue ();
  375. }
  376.  
  377. //----------
  378. void
  379. CModelessText::SetX12345FieldValue (
  380.     Int32        inNum)
  381. {
  382.     mX12345Field->SetValue (inNum);
  383. }
  384.  
  385. //----------
  386. double
  387. CModelessText::GetX12345e6FieldValue ()
  388. {
  389.     return mX12345e6Field->GetDValue ();
  390. }
  391.  
  392. //----------
  393. void
  394. CModelessText::SetX12345e6FieldValue (
  395.     double        inNum)
  396. {
  397.     mX12345e6Field->SetDValue (inNum);
  398. }
  399.  
  400. //----------
  401. void
  402. CModelessText::GetPasswordFieldString (
  403.     Str255        str)
  404. {
  405.     mPasswordField->GetDescriptor (str);
  406. }
  407.  
  408. //----------
  409. void
  410. CModelessText::SetPasswordFieldString (
  411.     ConstStr255Param        str)
  412. {
  413.     mPasswordField->SetDescriptor (str);
  414. }
  415.  
  416.     /*
  417.     //----------
  418.     Date
  419.     CModelessText::GetDateFieldDate ()
  420.     {
  421.     }
  422.  
  423.     //----------
  424.     void
  425.     CModelessText::SetDateFieldDate (
  426.         Date        str)
  427.     {
  428.     }
  429.     */
  430.  
  431.     /*
  432.     //----------
  433.     Date
  434.     CModelessText::GetTimeFieldDate ()
  435.     {
  436.     }
  437.  
  438.     //----------
  439.     void
  440.     CModelessText::SetTimeFieldDate (
  441.         Date        str)
  442.     {
  443.     }
  444.     */
  445.  
  446.     /*
  447.     //----------
  448.     Ptr
  449.     CModelessText::GetStyledFieldText ()
  450.     {
  451.     }
  452.  
  453.     //----------
  454.     void
  455.     CModelessText::SetStyledFieldText (
  456.         Ptr        str)
  457.     {
  458.     }
  459.     */
  460.  
  461.